package com.mrogrape.gui;

import java.awt.Color;
import java.awt.Font;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.text.StyleContext;

/**
 * 包含使用Swing框架编程时经常用到的一些方法。
 * 
 * @author Ice Spring
 * @version 1.1.1 20121130
 */
public class SwingUtils {

	/**
	 * 在一个框架（JFrame）中查看组件。
	 * 
	 * @param c 需要查看的组件
	 * @param title 框架的标题
	 * @return 框架对象
	 */
	public static JFrame showInFrame(JComponent c, String title){

		JFrame frame = new JFrame(title);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(c);
		frame.pack();
		frame.setLocationByPlatform(true);
		frame.setVisible(true);

		return frame;
	}

	/**
	 * 获取一个字体。
	 * 
	 * 此方法使用 StyleContext.getDefaultStyleContext()#getFont(String,int,int)来实现。
	 * 
	 * @param family 字体家族名
	 * @param style 字体样式
	 * @param size 字体大小
	 * @return 获取的字体
	 */
	public static Font getFont(String family, int style, int size){

		return StyleContext.getDefaultStyleContext().getFont(family, style, size);
	}
	
	/**
	 * 通过一个字体获取复合字体。
	 * 
	 * @param font 原字体
	 * @return 复合字体。
	 */
	public static Font getCompositeFont(Font font){
		
		return StyleContext.getDefaultStyleContext().getFont(font.getFamily(), font.getStyle(), font.getSize());
	}
	
	/**
	 * 将原始颜色加暗或加明的方法。
	 *
	 * @param orig 原始颜色。
	 * @param brighter -255~255之间的一个数，如果是正数，则加亮，反之则变暗。
	 */
	public static Color deriveColor(Color orig, int brighter) {

		int red = orig.getRed() + brighter;
		int green = orig.getGreen() + brighter;
		int blue = orig.getBlue() + brighter;

		if (red<0) red=0; else if (red>255) red=255;
		if (green<0) green=0; else if (green>255) green=255;
		if (blue<0) blue=0; else if (blue>255) blue=255;

		return new Color(red, green, blue);
	}

	/** Private constructor so we cannot instantiate this class. */
	private SwingUtils(){}
}
